// 正确次数: 787
// 错误次数: 346
// 准确率: 0.6946160635481023
// 最大连续正确次数: 13
// 最大连续错误次数: 5
// 连续正确段数: 246
// 连续错误段数: 245
// 平均连续正确次数: 3.1991869918699187
// 平均连续错误次数: 1.4122448979591837
// 当前连续正确次数: 7
// 当前连续错误次数: 0
// 计算结束: 53.158s

const _ = require('lodash')

// 计算尾部连续 0 的数量
function countTrailingZeros(array) {
  // 反转数组，创建一个新的副本，避免修改原数组
  const reversed = _.reverse([...array])

  // 从反转后的数组开始，取连续为 0 的元素
  const trailingZeros = _.takeWhile(reversed, (n) => n === 0)

  // 返回连续 0 的数量
  return trailingZeros.length
}

// 最小连续错误次数
const miniConsecutiveErrorCountMap = {
  two: 0,
  three: 0,
  four: 0,
  five: 0,
  six: 0,
  seven: 0,
  eight: 0,
  ten: 0,
  twelve: 0,
  sixteen: 0
}
// 理论准确率
const agvAccuracyRate = 1 - 16 / 49
// 阈值
const thresholdValue = 0.0225
// 阈值
const thresholdValueTwo = 0.02

module.exports = (groups) => {
  // return groups
  // 最大的平均连续错误次数
  const maxAvgConsecutiveIncorrect = _.max(groups.map((item) => item.stats.avgConsecutiveIncorrect))

  // const result = _.chain(groups)
  //   .filter((group) => {
  //     return (
  //       // 0.6859861591695502
  //       // TODO 锁定准去率范围!
  //       _.inRange(group.stats.accuracyRate, agvAccuracyRate - thresholdValue, agvAccuracyRate + thresholdValue) &&
  //       // 当前连续错误次数 >= 最大的平均连续错误次数
  //       group.stats.currentConsecutiveIncorrect >= maxAvgConsecutiveIncorrect &&
  //       // 当前连续错误次数 >= 最大连续错误次数 - 1
  //       group.stats.currentConsecutiveIncorrect >= group.stats.maxConsecutiveIncorrect - 1
  //     )
  //   })
  //   .value()

  const result = _.chain(groups)
    .orderBy(
      [
        // 连续错误段数
        (group) => group.stats.consecutiveIncorrectSegments,
        // 当前连续错误次数
        (group) => group.stats.currentConsecutiveIncorrect
      ],
      ['desc', 'desc']
    )
    .value()

  return result
}
